Skip to content

类的定义

语法格式如下:

python
class <ClassName>:
	<statements>

对象

对象就是类的一个实例。 可以通过 obj.name 和 obj.method 的方式来访问对象 obj 的属性 name 和方法 method.

python
class Animal:
	name = 'animal'
	def talk(self):
		print("wow, I'm", self.name)

animal = Animal()
animal.talk() #wow, I'm animal
print(animal.name) #animal`

init 构造方法 与 self 类的对象

init方法一个类中一个特殊方法,也就是构造方法。构造函数用于对象初始化。

self 就是指类的对象本身。

init 左右都是两个下划线

python
def __init__(self,[parameters]):
	self.<attributes> = <parameters>

构造方法接收外部传输进来的参数 parameters,分别赋值给内部属性 attributes。

python
#类的定义
class Animal:
	name = 'animal'
	def __init__(self, name1): #name1改成name也是可以的
		self.name = name1
	def talk(self):
		print('wow, I\\'m ' + self.name)
#类的实例化,animal1的name变成了Jack
animal1 = Animal('Jack')
print(animal1.name) #输出Jack
#animal2的name变成了Tom
animal2 = Animal('Tom')
print(animal2.name) #输出Tom

self 必须要有

所有类的方法的第一个参数必须是 self。

要访问类的某个属性,必须使用 self.attribute 的方式来访问。

属性与方法

除了 name 属性之外,我们还可以定义更多其它的属性,如 weight 等。

除了构造方法init之外,我们还可以定义更多其它的方法,如 talk、setWeight 方法等。

python
#类的定义
class Animal:
	name = ''
	age = 0
	def __init__(self, name, age):
		self.name = name
		self.age = age
	def talk(self):
		print('wow')
	def older(self):
		self.age += 1
#类的实例化
animal = Animal('Jack',10)
print(animal.age) #输出10
animal.older()
print(animal.age) #输出11

属性和方法默认是 public 公有的,有的时候,我们需要让属性和方法变为私有 private。

  • public 公有的属性和方法,类的实例能够访问。
  • private 私有的属性和方法,只有类的内部能够访问,类的实例不能访问。

私有 private 属性和方法,只需要在前面加上两个下划线__。

python
#类的定义
class Animal:
	name = 'animal' #公有属性
	__weight = 0.0 #私有属性
	def __init__(self, name, weight): #私有方法
		self.name = name
		self.__weight = weight/1000 #私有属性,可以通过self.来访问
	def __talk(self): #私有方法
		print('wow')
	def getWeight(self): #公有方法
		return str(self.__weight) + 'kg'
	def setWeight(self, weight): #公有方法
		self.__weight = weight/1000
#类的实例化
animal = Animal('Jack',1000)
animal.setWeight(2000)
print(animal.getWeight()) #输出2.0kg
print(animal.name) #输出Jack
print(animal.__weight) #报错

类的应用

参考代码(不要轻易点开)
python
class Student:
	name = ''
	roll_id = '1'
	score = 0

	def __init__(self, name, roll_id, score):
		self.name = name
		self.roll_id = roll_id
		self.score = score

	def getGrade(self):
		if 90<=self.score<=100:
			return 'A'
		elif 80<=self.score<90:
			return 'B'
		elif 70<=self.score<80:
			return 'C'
		elif 60<=self.score<70:
			return 'D'
		else:
			return 'F'

	def printFormat(self):
		print(self.name, self.roll_id, self.getGrade())

n = int(input())
students = [0]*n
for i in range(n):
	name, roll_id, score = input().split()
	students[i] = Student(name, roll_id, int(score))

for i in range(n-1):
	for j in range(n-i-1):
		if students[j].score < students[j+1].score:
			students[j],students[j+1] = students[j+1],students[j]

for student in students:
	student.printFormat()